﻿using System;
using System.Collections.Generic;
using AutoMapper;
using CodeSaude.Application.Interfaces;
using CodeSaude.Application.ViewModels;
using CodeSaude.Domain.Entities;
using CodeSaude.Domain.Interfaces.Service;

namespace CodeSaude.Application.Services
{
    public class GrupoUsuarioApplicationService : BaseApplicationService,  IGrupoUsuarioApplicationService
    {
        private readonly IGrupoUsuarioService _grupoUsuarioService;

        public GrupoUsuarioApplicationService(IGrupoUsuarioService grupousuarioService)
        {
            _grupoUsuarioService = grupousuarioService;
        }

        //public ValidationApplicationResult Add(GrupoUsuarioViewModel GrupoUsuarioViewModel)
        //{
        //    var usuario = Mapper.Map<GrupoUsuarioViewModel, Usuario>(GrupoUsuarioViewModel);

        //    var result = _usuarioService.AdicionarUsuario(usuario);

        //    //if(result.IsValid)
        //        _usuarioService.SaveChanges();

        //    return Mapper.Map<ValidationResult, ValidationApplicationResult>(result);
        //}

        public void Add(GrupoUsuarioViewModel grupoUsuarioViewModel)
        {
            var grupoUsuario = Mapper.Map<GrupoUsuarioViewModel, GrupoUsuario>(grupoUsuarioViewModel);

            BeginTransaction();
            _grupoUsuarioService.AdicionarGrupoUsuario(grupoUsuario);
            Commit();
        }

        public GrupoUsuarioViewModel GetById(int id)
        {
            return Mapper.Map<GrupoUsuarioViewModel>(_grupoUsuarioService.GetById(id));
        }

        public IEnumerable<GrupoUsuarioViewModel> GetAll()
        {
            return Mapper.Map<IEnumerable<GrupoUsuarioViewModel>>(_grupoUsuarioService.GetAll());
        }

        public void Update(GrupoUsuarioViewModel grupoUsuarioViewModel)
        {
            var grupoUsuario = Mapper.Map<GrupoUsuario>(grupoUsuarioViewModel);

            BeginTransaction();
            _grupoUsuarioService.Update(grupoUsuario);
            Commit();
        }

        public void Remove(GrupoUsuarioViewModel grupoUsuarioViewModel)
        {
            var user = _grupoUsuarioService.GetById(grupoUsuarioViewModel.GrupoUsuarioId);
            BeginTransaction();
            _grupoUsuarioService.Remove(user);
            Commit();
        }

        public void Dispose()
        {
            _grupoUsuarioService.Dispose();
        }
    }
}
